package cn.tedu.csmall.product.controller;

import cn.tedu.csmall.product.pojo.dto.BrandAddNewDTO;
import cn.tedu.csmall.product.pojo.dto.BrandUpdateDTO;
import cn.tedu.csmall.product.pojo.vo.BrandListItemVO;
import cn.tedu.csmall.product.service.IBrandService;
import cn.tedu.csmall.product.web.JsonResult;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 品牌模块的控制层
 * @author XingHaiYang
 * @date 2022/11/1 10:20
 */
@RestController
@RequestMapping("/brands")
@Slf4j
@Api(tags = "1.品牌管理模块")
public class BrandController {
    /**
     * 依赖注入品牌的service业务层对象
     */
    @Autowired
    public IBrandService service;

    /**
     * 新增品牌功能
     * @param brandAddNewDTO 从客户端获取到的新增参数，比如用户名等信息封装在了brandAddNewDTO对象中
     * @return 返回新增的结果，如果成功返回OK，如果不成功，返回catch中处理的结果
     */
    @PostMapping("/addNew")
    @ApiOperation("增加品牌")
    @ApiOperationSupport(order = 100)
    public JsonResult addNew(@RequestBody BrandAddNewDTO brandAddNewDTO) {
        log.debug("新增品牌的控制层功能开始，新增参数为={}",brandAddNewDTO);
        service.addNew(brandAddNewDTO);
        return JsonResult.ok();
    }

    /**
     * 删除品牌功能
     * @param id 需要删除品牌数据的id值，是从客户端接收到的id值
     * @return 返回删除的结果
     */
    @PostMapping("/{id:[0-9]+}/delete")
    @ApiOperation("删除品牌")
    @ApiOperationSupport(order = 200)
    public JsonResult deleteById(@PathVariable Long id){
        log.debug("删除功能开始...接收到的id值={}",id);
        service.deleteById(id);
        log.debug("删除品牌成功");
        return JsonResult.ok();
    }

    /**
     * 修改品牌功能
     * @param id
     * @param brandUpdateDTO
     * @return
     */
    @PostMapping("/{id:[0-9]+}/update")
    @ApiOperation("修改品牌")
    @ApiOperationSupport(order = 300)
    public JsonResult updateById(@PathVariable Long id,@RequestBody BrandUpdateDTO brandUpdateDTO){
        log.debug("修改品牌功能开始,接收到的参数值为{}，{}",id,brandUpdateDTO);
        service.updateById(id,brandUpdateDTO);
        return JsonResult.ok();
    }

    /**
     * 查询品牌列表
     * @return
     */
    @GetMapping("")
    @ApiOperation("查询品牌列表")
    @ApiOperationSupport(order = 400)
    public JsonResult list(){
        List<BrandListItemVO> data = service.list();
        log.debug("查询品牌列表完成，查询出的数据为{}",data);
        return JsonResult.ok(data);
    }
}
